支援 Mac App Store


概觀

您可以透過官方 Mac App Store 或外部商店發行您的 macOS 應用程式。但應用程式在發行前應始終簽署。未簽署的應用程式將被 Gatekeeper 拒絕啟動。

本指南將說明如何為 macOS 簽署基於 NW.js 的應用程式。

先備條件

  • 透過 iTunesConnect 建立 macOS 應用程式
  • Apple Developer 取得應用程式和安裝程式憑證。
    • 如果您透過 Mac App Store 發佈應用程式
      • 第三方 Mac 開發者應用程式:Foo (XXXXXXXXXX)
      • 第三方 Mac 開發者安裝程式:Foo (XXXXXXXXXX)
    • 如果您在 商店外 發佈應用程式
      • 開發人員 ID 應用程式:Foo (XXXXXXXXXX)
      • 開發人員 ID 安裝程式:Foo (XXXXXXXXXX)

建置 App

nwjs.io 下載 NW.js MAS 組建並依照 封裝和發佈 中的說明組建您的應用程式。

簽署 App

build_mas.py 用於為 macOS 簽署您的應用程式。此指令碼可以在簽署後透過提供 --pkg 參數產生可上傳的 .pkg 檔案以供 Mac App Store 使用。

基本用法

python build_mas.py -C build.cfg -I myapp-dev.app -O MyApp.app

組態檔格式

設定檔 (build.cfg) 是人類可讀的文字檔。它包含用於簽署和封裝應用程式的許多重要設定。

ApplicationIdentityInstallerIdentity 是用於簽署和封裝應用程式的憑證名稱。請參閱 先備條件 以了解您需要哪些憑證。

NWTeamID 用於建立用於啟動基於 NW.js 的應用程式的 IPC 通道。它可以從 Apple Developer -> 會員資格 -> 團隊 ID 取得。

ParentEntitlementsChildEntitlements 應為有效的 權限檔案。預設情況下,您的應用程式會以最低權限簽署,如下所示。

entitlements-parent.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>com.apple.security.app-sandbox</key>
  <true/>
  <key>com.apple.security.application-groups</key>
  <string>NWTeamID.your.app.bundle.id</string>
</dict>
</plist>

entitlements-child.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>com.apple.security.app-sandbox</key>
  <true/>
  <key>com.apple.security.inherit</key>
  <true/>
</dict>
</plist>

請閱讀範例 build.cfg 以了解所有欄位的詳細意義。